package gui;

import controle.RequisitorHTTP;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class PesquisarCliente extends MIDlet implements CommandListener{

        private Display display;
        private Form formDadosCliente, formConfirmacao, conclusao;
        private List listResultado;

        private String respostaDoServidor;

        private static final Command preencherCampos = new Command("Continuar", Command.SCREEN, 0),
                                                        pesquisar = new Command("Pesquisar", Command.SCREEN, 0),
                                                        back = new Command("Voltar",Command.BACK,1),
                                                        ok = new Command("Confirmar", Command.OK, 0),
                                                        exit = new Command("Sair", Command.EXIT, 1),
                                                        detalhes = new Command("Detalhes", Command.SCREEN, 1),
                                                        escolher = new Command("Escolher", Command.SCREEN, 0);

        //campos para pesquisa
        private TextField tfNomeNomeFantasia , tfCPFCNPJ;
      
        public static final int TELA_DADOS_CLIENTE=0;
        public static final int TELA_CONFIRMACAO=1;
        private int telaAtual=0;
        private boolean estavaPausado=false;
        
        public PesquisarCliente() {
                this.display=Display.getDisplay(this);

                this.tfNomeNomeFantasia = new TextField("Nome/NomeFantasia:", "", 40, TextField.ANY);
                this.tfCPFCNPJ = new TextField("CPF/CNPJ:", "", 14, TextField.NUMERIC);


                this.formDadosCliente = new Form("Preencha os campos desejados");
                this.formDadosCliente.addCommand(pesquisar);
                this.formDadosCliente.addCommand(back);
                this.formDadosCliente.setCommandListener(this);

                //ao final...
                this.formConfirmacao = new Form("Confirmação");
                formConfirmacao.addCommand(back);
                formConfirmacao.addCommand(ok);
                formConfirmacao.setCommandListener(this);

                conclusao = new Form("Conclusão");
                conclusao.append("Teste concluído.");
                conclusao.addCommand(exit);
        }

        public void startApp() {
                if(estavaPausado()){
                        estavaPausado=false;
                        setTelaAtual(telaAtual);
                }else{
                        mostraTelaDadosDoCliente();
                }
        }

        public void pauseApp() {
                this.estavaPausado=true;
        }

        public void destroyApp(boolean unconditional) {
                this.formConfirmacao.deleteAll();
                this.formDadosCliente.deleteAll();
           
                this.formDadosCliente = null;
                this.formConfirmacao=null;

                notifyDestroyed();
        }
        /**
         * @param pessoaFisica envie true se o cliente eh pessoa fisica
         */
               
        private void mostraTelaDadosDoCliente(){

                this.formDadosCliente.deleteAll();//remove todos os itens antigos.
                // Adiciona os TextFild ao formulario de pesquisa
                this.formDadosCliente.append(tfNomeNomeFantasia);           
                this.formDadosCliente.append(tfCPFCNPJ);

                //se o usuario tiver voltado para a tela do tipo de cliente e mudado a escolha
              
                this.display.setCurrent(this.formDadosCliente);
        }

        public String formataCpfCnpj(String formatar){
            String cpf="";
            String cnpj="";

            if(!formatar.equals("")&& formatar.length()==11){
                cpf=formatar;
                cpf = cpf.substring(0, 3)+"."+cpf.substring(3, 6)+"."+cpf.substring(6, 9)+"-"+cpf.substring(9, 11);
                return cpf;
            }else if (!formatar.equals("")&& formatar.length()==14){
                cnpj=formatar;
                cnpj = cnpj.substring(0, 2)+"."+cnpj.substring(2, 6)+"."+cnpj.substring(6, 9)+"/"+cnpj.substring(9, 13)+"-"+cnpj.substring(13, 14);
                return cnpj;
            }else{
                System.out.println(formatar);
                return "";
            }
        }


        private void mostraTelaDeConfirmacao(){
                String conf = "Pesquisar Cliente." +
                                "\nNome / Nome Fantasia: "+this.tfNomeNomeFantasia.getString();
                String cpfCnpj = formataCpfCnpj(this.tfCPFCNPJ.getString());                
                conf += "\nCPF / CNPJ : "+(cpfCnpj!=null? cpfCnpj : "" );
                
                 this.formConfirmacao.deleteAll();
                 this.formConfirmacao.append(conf);
                 display.setCurrent(formConfirmacao);
        }


        public void setTelaAtual(int telaAtual) {
                this.telaAtual = telaAtual;
                switch(telaAtual){                       
                        case TELA_DADOS_CLIENTE: mostraTelaDadosDoCliente(); break;
                        case TELA_CONFIRMACAO: mostraTelaDeConfirmacao(); break;
                        default: setTelaAtual(0); break;
                }
        }

        public boolean estavaPausado() {
                return estavaPausado;
        }
        public int getTelaAtual() {
                return telaAtual;
        }

        public void commandAction(Command comandoRecebido, Displayable arg1) {

                if(comandoRecebido==preencherCampos){
                        //System.out.println("next!");
                        this.setTelaAtual(PesquisarCliente.TELA_DADOS_CLIENTE);
                }else if(comandoRecebido==pesquisar){
                        //System.out.println("back");
                        this.setTelaAtual(PesquisarCliente.TELA_CONFIRMACAO);
                }else if(comandoRecebido==back){
                        //System.out.println("back");
                        this.setTelaAtual(telaAtual-1);
                }else if(comandoRecebido==ok){
                        this.comunicaComServidor();
                }else if(comandoRecebido==detalhes){
                        this.exibeDetalhesDeCliente(this.listResultado.getSelectedIndex());
                }else if(comandoRecebido==escolher){
                        this.destroyApp(true);
                }
        }

        private void comunicaComServidor(){
                String url =  "http://200.129.46.234:8080/CarteiraIbyteServlet/PesquisarCliente";
                String parametros = "?"+
                                "nomeNomeFantasia="+this.tfNomeNomeFantasia.getString();
                String cpfCnpj = formataCpfCnpj(this.tfCPFCNPJ.getString());
                parametros +="&cpfCnpj="+cpfCnpj;

               RequisitorHTTP requisitor = new RequisitorHTTP(url+parametros, this);
               requisitor.start();
        }

        /**
         * Este método é chamado pelo requisitor.
         * @param respostaHTTP
         */
        public void exibeListaDeClientes(String respostaHTTP){
                System.out.println("Resposta: "+respostaHTTP);
                this.respostaDoServidor=respostaHTTP;
                Form respostaBruta = new Form("Resposta bruta do servidor");
                respostaBruta.append(respostaHTTP);
                this.display.setCurrent(respostaBruta);
          
        }


        private void exibeDetalhesDeCliente(int selectedIndex) {

            }

}